<?php
/**
 * Клас для роботи зі списком доступних проектів
 *
 * @author ihor
 */
class Projects {
    /**
     * шлях з файлами проектів
     * @var string 
     */
    protected $_path;
    public function __construct() {
        $this->_path = realpath(Zend_Registry::get('config')->projects->path);
    }
    
    /**
     * для створення нового проекту
     * @return Project 
     */
    public function createProject() {
        return new Project($this->_path);
    }
    
    /**
     * повертає усі проекти, що задовольняють паттерну
     * @param string $pattern
     * @return array 
     */
    public function getAll($pattern = '') {
        $res = array();
        if ($pattern == '')
            $pattern = '*';
        $pattern .= '_config.xml';
        $files = glob($this->_path . '/' . $pattern);
        foreach ($files as $file)
            $res[] = new Project($this->_path, $file);
        return $res;
    }
    
    /**
     * повертає проект з назвою або генерує Exception
     * @param string $projectName
     * @return Project 
     */
    public function getProject($projectName) {
        $projects = $this->getAll($projectName);
        if (count($projects) != 1)
            throw new Exception('Не вдається знайти проект ' . $projectName);
        return $projects[0];
    }

    /**
     * видаляє проект з назвою або генерує Exception
     * @param string $projectName
     * @return Project 
     */
    public function deleteProject($projectName) {
        if (!file_exists($this->_path . '/' . $projectName . "_config.xml"))
            throw new Exception('Не вдається знайти проект з такою назвою');
        if (!rename($this->_path . '/' . $projectName . "_config.xml",
                    $this->_path . '/' . $projectName . "_config_deleted.xml"))
            throw new Exception('Не вдається видалити файл');
    }

}